package com.ibiaoke.customer.service;

import com.ibiaoke.common.base.Page;
import com.ibiaoke.common.utils.AssertUtils;
import com.ibiaoke.customer.consts.PayTypeConst;
import com.ibiaoke.customer.dao.DepositRecorderDao;
import com.ibiaoke.customer.entity.DepositRecorder;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.List;

/**
 * Created by Administrator on 2017/6/20.
 */
@Service("depositRecorderService")
public class DepositRecorderServiceImpl implements DepositRecorderService{

    @Autowired
    private DepositRecorderDao depositRecorderDao;

    @Autowired
    private CustomerService customerService;

    @Override
    public List<DepositRecorder> listDepositRecorder(String customerMobile, Page page) {
        Integer customerId=null;
        if(StringUtils.isNotBlank(customerMobile)) {
             customerId = customerService.getCustomerId(customerMobile);
        }
        return  depositRecorderDao.depositRecorderList(customerId,page);
    }

    @Override
    public void insert(Integer customerId, Integer payType, String transactionNo, Integer tradeType, BigDecimal money) {
        DepositRecorder depositRecorder = new DepositRecorder();
        depositRecorder.setCustomerId(customerId);
        depositRecorder.setPayType(payType);
        depositRecorder.setTransactionNo(transactionNo);
        depositRecorder.setTradeType(tradeType);
        depositRecorder.setRecorderMonney(money);
        depositRecorder.setRemark(getDepositRecorderRemark(payType));
        depositRecorderDao.insertSelective(depositRecorder);
    }

    @Override
    public void insertByRefund(Integer customerId, Integer payType, String transactionNo, Integer tradeType, BigDecimal money) {
        //创建对象
        DepositRecorder depositRecorder = new DepositRecorder();
        //设置depositRecorder表中的会员id
        depositRecorder.setCustomerId(customerId);
        //设置depositRecorder表中的支付方式
        depositRecorder.setPayType(payType);
        //设置depositRecorder表中的来源单号
        depositRecorder.setTransactionNo(transactionNo);
        //设置depositRecorder表中的交易类型
        depositRecorder.setTradeType(tradeType);
        //设置depositRecorder表中的交易金额
        depositRecorder.setRecorderMonney(money);
        //设置depositRecorder表中的记录说明为"退款-预存款"
        depositRecorder.setRemark("退款-预存款");
        //增加数据
        depositRecorderDao.insertSelective(depositRecorder);
    }

    @Override
    public List<DepositRecorder> listDepositRecorderByCustomerId(Integer customerId, Page page) {
        AssertUtils.notNull(customerId, "用户Id不能为空");
        return depositRecorderDao.listDepositRecorderByCustomerId(customerId,page);
    }

    @Override
    public Integer insertByRefund(DepositRecorder depositRecorder) {
        AssertUtils.notNull(depositRecorder,"数据异常");
        return depositRecorderDao.insertSelective(depositRecorder);
    }

    public String getDepositRecorderRemark(Integer payType){
        if(payType!=null){
            switch (payType){
                case PayTypeConst.ALIPAY:
                    return "支付宝充值";
                case PayTypeConst.WECAHT:
                    return "微信充值";
                case PayTypeConst.DEPOSIT:
                    return "预存款消费";
            }
        }
        return null;
    }
}
